画布 1
网络层
  网络基础
    网络层概述
      目标
        实现主机到主机之间的通信
        为运输层提供支持
          为运输层传递数据,所有运向这个主机的信息就会先到网络层,网络层再转发到运输层,运输层再根据套接字编号进行转发
      功能
        选路
        转发
        连接建立
    虚电路和数据报网络
      虚电路
        工作机制
          数据开始流动之前，呼叫建立；流动结束后要断开
          每一个分组携带虚电路的标识 (而不是目的主机的地址)
          路径上的每一个路由器必须为进行中的连接维持连接状态信息
          传输层的连接仅涉及到两个端系统（end system）
          链路, 路由器资源 (带宽、缓冲区) 可以分配给虚电路
          目的：为了达到类似线路交换的性能
          特点
            传输前先建立连接
            所有的包都只会经过一条路
            IP包的标志不是目的地址而是虚电路号
        组成
          从源到目的主机的路径
          VC(Virtual Circuit)号, 沿着该路径的每段链路的一个号码
          沿着该路径的每台路由器中的转发表
            转发表由入接口,出接口以及各接口的VC号
            转发过程
              路由器之间或路由器和主机之间会建立许多链路
              在转发的时候,每个链路都会做一个标号
              根据进入的链路标号以及链路的结构来确定转发的端口和新的VC号(每一次转发都要更新VC号)
        用途
          ATM网络
      数据报
        特点
          在网络层没有连接建立过程
          路由器：在端到端的连接中不维护连接状态信息
          在网络层不存在“联接”的概念
          传输报文时使用目的主机地址信息
          同一对主机间的报文可能会走不同的路径
        用途
          Internet
    路由器工作原理
      输入端口
        排队
          如果输入端口的处理速率超过了交换结构的速率，输入端口就可能产生排队
          如果若干个输入端口争用一个输出端口,也会造成排队
        按照给出的目的地址,使用输入端口的内存中存储的路由选择表，查找输出端口
      转发结构
        功能
          选路算法(控制平面)
          转发表(数据平面)
        结构
          经内存交换
            分组从输入端口拷贝到内存中再拷贝到输出端口中
          经总线交换
            一根共享总线来进行交换
          经内联网络
      输出端口
        排队
          当通过交换结构到达的分组速率超过了输出链路的速率时，需要对分组进行缓存
        分组调度策略
          先来先服务 FCFS
          加权公平排队 WFQ
        分组丢弃策略
          被动队列管理(丢弃尾部)
          主动队列管理
            随时计算平均队列长度avgth
            最小阈值minth、最大阈值maxth
            avgth小于minth ，允许分组入列
            avgth大于maxth ，分组被标记或丢弃
            avgth在minth和maxth之间，按照概率标记或丢弃分组
  数据平面
    IP协议
      报文格式
        IP数据报首部
          20字节
          组成
            分片偏移
              该分片的第一个字节位于原来分片中的什么位置,假设该分片的第一个字节为原来分片中的第x个字节,那么就称其为x/8
            长度
              包括首部
            ID
              分片之后ID一样
            源地址
            目的地址
            标志
              DF
              MF
              FF
                最后一个为0
                不是最后一个就为1
        IP数据报分片
          网络链路有MTU属性,就是一次性最大传输的帧长度
          大的IP数据报在网络中会被分成小的分片
          一个数据报变成了几个数据报,一个数据报的内容部分分成若干个小的数据报,然后加上头部元素
          重组只在目的主机进行
          数据报头部的标识、标志以及片偏移字段用于目的主机对接收的分片进行重组
      IP地址
        32位主机或路由器的接口标志符
        接口:连接主机,路由器之间的物理链路
        IP地址只和接口有关,和路由器,主机没有关系
        结构
          网络号
          主机号
        在同一个局域网内的主机接口或者路由器接口IP地址中的网络号必须是一样的
        路由器的每一个接口都具有不同网络号的IP地址
      子网和掩码
        从主机中借用一部分的位数作为子网号
        通过将网络号和子网号相应的位置全置1，主机号相应的位置全置0，即可得到子网掩码
        引入子网的转发
          比较目的地址和子网掩码的并和转发表中的网络号是不是一样的,如果不一样就是下一个,一样的话查找输出端口直接转发之.
    CIDR
      编码格式
        IP地址 ::= {<网络前缀>, <主机号>}
        这样可以更加方便地划分子网,其中斜线后面的位数就是表示网络号的位数
        斜线记法：192.168.0.1/24
      最长前缀匹配
        应当从匹配结果中选择具有最长网络前缀(n最大的)的路由：最长前缀匹配(longest-prefix matching)。
        匹配的意思就是对于一个表项xx:xx:xx:xx/n,IP包的目的地址的前n位与表项xx:xx:xx:xx的前n位相同就可以 目的地址的前n位和网络编号的前n位(前缀匹配)
          例子:206.0.71.142和206.0.71.128/25,这个地址和206.0.71.128的前25位相同,就称之为匹配
        可以代表这个网络的子网掩码是前n位是1,这个地址和子网掩码的并等于网络地址的话就匹配
        也就是说转发,只能转发匹配的表项,不匹配的是不能被转发的.
      层次编址
        小的网络统一归大的网络管
    DHCP服务器
      DHCP: Dynamic Host Configuration Protocol 动态主机配置协议:从服务器上动态获取IP地址
      做法
        首先客户端广播一个目的为255.255.255.255的DHCP发现报文,通过transaction ID来标记这个是我的请求.主机收到transaction ID和这个一样的DHCP提供报文就知道肯定是自己的了
        DHCP服务器会广播一个DHCP提供报文,来响应DHCP发现,其中包括各种网络信息
        接着客户端会广播一个DHCP请求报文,请求使用DHCP服务器推荐的报文.
        DHCP服务器响应一个ACK请求
        这几步所有的目的地址全部都是255.255.255.255 对应着广播地址
    NAT(内网-外网地址转换协议)
      本地网络只要使用一个IP地址就可以和外部网络相连,本地网络中的所有主机(IP:10.0.0.x)在外面的人眼中就是一个特殊的外部地址
      维护一个NAT路由,路由在本地网络有一个地址,在全球网络也有一个地址.还有一张NAT表,分别记录本地网络中的地址,进程和全球网络的地址,进程的对应关系
      做法
        发送数据报: 将每个外出报文的源IP地址,端口号替换 为NAT IP地址以及新的端口号
        接收数据报:根据NAT转换表将每个进入报文的NAT IP地址,端口号替换为相应的目的IP地址以及端口号,目的地址变成NAT转换表里面的元素
      有服务器怎么办
        静态记录
          如(123.76.29.7,80) 总是指向(10.0.0.1,80)
        即用即插
          了解公共IP地址
          向路由器注册/移除映射记录
          （内部IP地址，内部端口号）（公共IP地址，公共端口号）
          内部主机通过某种渠道向外部应用程序公开（公共IP地址，公共端口号）
        中继
    ICMP(互联网控制报文协议)
      用于主机、路由器、网关之间交换网络层信息
      ICMP 报文封装在IP分组(是IP报里面的数据部分)中
    IPv6协议
      无检查和，中间结点无需计算
      中间结点不再负责分片和重组，由端结点负责
      首部长度固定，加速中间结点转发速度
      地址的长度是128位的
      与IPv4的兼容
        隧道模式,IPv6报文段作为IPv4的数据放在分组
        隧道里面,如果有一部分网络不支持IPv6,那么就把IPv6的分组放到IPv4分组的数据部分
        IPv4分组的目的地址是IPv4隧道的终点,原地址是IPv4隧道的起点
  控制平面
    选路算法
      AS内部选路协议
        OSPF算法(Link State)
          所有路由器都知道整个网络拓扑图以及链路的费用信
          迪克斯特拉算法
            先计算每个点到源点的距离
            选择一个到源点距离最短的一个点w选一个进入K集合
            对于这个点w,看看所有和w邻接点v,看看是原来的D(v)短,还是经过w的新路径短:D(w)+c(v,w)
D(v) = min( D(v), D(w) + c(w,v) )
          向本自治系统中所有路由器发送信息，使用的方法是洪泛法
          发送的信息就是与本路由器相邻的所有路由器的链路状态
          只有当链路状态发生变化时，路由器才用洪泛法向所有路由器发送此信息,过了30分钟,就算没有发生变化,也要广播状态
          所有路由器会构建一个链路状态数据库,这个数据库就是全网络的拓扑结构图
        RIP算法(Distance Vector)
          每个路由器仅有与其相连链路的费用信息
          dx(y)=minv{c(x,v)+dv(y)}
          路由器之间的链路消费永远是1
          更新算法
            路由器X得到相邻路由器Y的路由表，从而得知：Y到网络Z的最短距离为N
            如果路由器X没有到网络Z的路由条目，则添加一条经由路由器Y到网络Z距离N+1的路由条目
            如果路由器X已有到网络Z的路由条目，其距离为M，如果M>N+1，则更新该条目为经由路由器Y到网络Z距离N+1，否则不更新
          毒性逆转
            如果z通过y选路到达目的地x :z将通告y，它到x的距离是无穷大 (所以 y不会通过z到达x)
          选路更新消息每30s在邻居之间以RIP响应报文（RIP通告）的形式进行交换
          路由器经过180s没有收到来自某个邻居的RIP通告，则认为该邻居已离线，修改选路表，向其它邻居广播
      AS间选路协议
        BGP算法
          AS路由需要做的事情
            从相邻AS获取子网可达性信息
            向该AS内部的所有路由器传播这些可达性信息
            基于该可达性信息和AS策略，决定到达子网的“好”路由
          BGP发言人
            和其他AS交换信息使用TCP连接
            BGP发言人要向其他BGP发言人交换AS路由信息,可以是边界路由器
          BGP路由通告
            其他AS可以通过BGP发言人传递通告
            通告分成两部分
              前缀
                可以到达的网络号
              属性
                AS-PATH: 该属性包含了前缀的通告已经通过的那些AS(经过哪些AS了)
                NEXT-HOP: 指明到下一跳AS的具体的路由器 (因为可能从当前AS到下一跳AS之间可能有多条链路)
            然后BGP通过iBGP向本AS内所有路由器发送通告
          BGP路由选路
            本地偏好值: 策略决定。具有最高本地偏好值的路由将被选择。
            最短AS-PATH ：在余下的路由中，具有最短AS-PATH的路由将被选择。
            从余下的路由中，选择具有最靠近NEXT-HOP路由器的路由:热土豆路由。
            如果仍余下多条路由，该路由器使用BGP标识以选择路由。
      总的选路
        路由器知晓前缀的存在性
        确定此前缀的转发端口
          使用BGP路由选择确定最佳域间路由
            通过BGP算法算出去往哪一个AS合适
            然后根据表项中的NEXT-HOP找到路由
          使用IGP路由选择确定最佳域内路由
            根据AS内部的选路算法(OSPF/RIP)来选择去往本AS内的何处
          确定最佳路由的转发端口
            决定完之后就可以添加端口了
        将（前缀，端口）表项放入转发表中